home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 001-010 / amok04 / checker / fsgenerator < prev    next >
Text File  |  1993-11-04  |  10KB  |  462 lines

  1. ANFANG:
  2.  
  3. GOSUB INITALL
  4.  
  5.  
  6. MAIN:'''''''''''''''''''''''''''''''''''''''''''''''''''''  
  7.  
  8.   GOSUB BILDAUFBAU
  9.   GOSUB OEFFNEN
  10.   LOCATE 22,51
  11.   PRINT"                        "
  12.   LOCATE 22,51
  13.   PRINT"TASTE DRUECKEN"
  14. WARTEN:
  15.   IN$=INKEY$
  16.   IF IN$="" THEN GOTO WARTEN
  17.   LOCATE 22,51
  18.   PRINT"                        "
  19.   GOSUB VERBLOOP
  20.   END
  21.  
  22. VERBLOOP:
  23.   
  24.   DX=EICH*2*DT
  25.   PX=XALT
  26.   PXALT=PX
  27.   WHILE XX=0      'PX<XNEU
  28.     KM=KM+V/10000*DT/.25                'KM/SEC
  29.     KM&=FIX(10*KM)
  30.     TEMPSCHR=DT*TANS/50+TEMPZUFALL
  31.     FWIND=FAKTOR*V*V
  32.     IF SST=3 THEN
  33.       A=(-FWIND+SPEEDZUFALL)/M
  34.       V=V+A*DT
  35.     ELSEIF SST<4 THEN
  36.       A=(KRAFTF*F-FWIND+SPEEDZUFALL)/M
  37.       V=V+A*DT
  38.     ELSE
  39.       V=0
  40.     END IF
  41.     IF V<0 THEN V=0
  42.     VNEU=V*3.6
  43.     IF VNEU>2 THEN
  44.       MOMVNEU=VERBFAKT*F/VNEU
  45.       SPRIT#=SPRIT#-ABS(SPRITFAKT%*EICH*(MOMVNEU*V*DT)/1000000&)
  46.     ELSE
  47.       MOMVNEU=200
  48.       SPRIT#=SPRIT#-ABS(F*SPRITFAKT%*DT*.00001)
  49.     END IF
  50.     IF SPRIT#<=0 THEN
  51.       SPRIT#=0
  52.       IF TANKLEER%=0 THEN
  53.         F=0
  54.         TANKLEER%=1
  55.         GOSUB SETF
  56.       END IF
  57.     END IF
  58.     SPRITALT#=SPRIT#
  59.     IF SPRIT#<5 THEN SOUND 1000,1
  60.     IF MOMVNEU>200 THEN 
  61.       MOMVNEU=200
  62.     ELSEIF MOMVNEU<0 THEN
  63.       MOMVNEU=0
  64.     END IF
  65.     TEMP=TEMP+TEMPSCHR
  66.     LINE(PXALT,130-.5*TEMPALT)-(PX,130-.5*TEMP),2
  67.     LINE(PXALT,130-.5*MOMVALT)-(PX,130-.5*MOMVNEU),3  
  68.     LINE(PXALT,130-.5*VALT)-(PX,130-.5*VNEU),1
  69.     IF TEMP>=90 THEN SOUND 440,1
  70.     MOMVALT=MOMVNEU
  71.     VALT=VNEU
  72.     TEMPALT=TEMP
  73.     PXALT=PX
  74.     PX=PX+DX
  75.     LOCATE 12,67:PRINT CINT(TEMP)
  76.     LOCATE 7,67:PRINT FIX(1000*SPRIT#)/1000 "         "
  77.     IF PX>520 THEN
  78.       GOSUB BILDAUFBAU
  79.       XNEU=40+XNEU-PX
  80.       PX=40
  81.       PXALT=PX
  82.     END IF
  83.     VNEUI%=CINT(VNEU)
  84.     MOMVNEUI%=CINT(MOMVNEU)
  85.     SPRITI%=CINT(10*SPRIT#)
  86.     TEMPI%=CINT(TEMP)
  87.     SSTI%=CINT(SST)
  88.     BINAERSUMI%=CINT(BINAERSUM)
  89.     IF DNAME$<>"" THEN
  90.       VNEU$=STR$(VNEUI%)
  91.       MOMVNEUI$=STR$(MOMVNEUI%/10)
  92.       SPRITI$=STR$(SPRITI%/10)
  93.       TEMPI$=STR$(TEMPI%)
  94.       SSTI$=STR$(SSTI%)
  95.       BINAERSUMI$=STR$(BINAERSUMI%)
  96.       BLINK$=STR$(BLINK%)
  97.       KM$=STR$(KM&/10)
  98.       WRITE #1,VNEU$
  99.       WRITE #1,MOMVNEUI$
  100.       WRITE #1,SPRITI$
  101.       WRITE #1,TEMPI$
  102.       WRITE #1,SSTI$
  103.       WRITE #1,BINAERSUMI$
  104.       WRITE #1,BLINK$
  105.       WRITE #1,KM$
  106.     END IF
  107.     AUSGZAEHLER=AUSGZAEHLER+1
  108.     ZUFZAEHLER=ZUFZAEHLER+1
  109.     IF ZUFZAEHLER>10 THEN
  110.       SPEEDZUFALL=120*RND-60
  111.       TEMPZUFALL=.2*RND-.1
  112.       ZUFZAEHLER=0
  113.     END IF
  114.     GOSUB SHOWAUSG
  115.   WEND
  116.   RETURN 
  117.     
  118. SHOWAUSG:    
  119.     LOCATE 22,5:PRINT USING"#####";AUSGZAEHLER;
  120.     LOCATE 22,11:PRINT":";
  121.     LOCATE 22,13:PRINT USING"#####";VNEUI%;
  122.     LOCATE 22,18:PRINT USING"#####";MOMVNEUI%;
  123.     LOCATE 22,23:PRINT USING"#####";SPRITI%;
  124.     LOCATE 22,28:PRINT USING"#####";TEMPI%;
  125.     LOCATE 22,33:PRINT USING"#####";SSTI%;
  126.     LOCATE 22,38:PRINT USING"#####";BINAERSUMI%;
  127.     LOCATE 22,43:PRINT USING"#####";BLINK%;
  128.     LOCATE 22,51:PRINT KM&"            "
  129.     RETURN
  130.     
  131. SETSST:
  132.   CALL PASSIV(1,SST+1)
  133.   SST=MPUNKT%-1  
  134.   CALL AKTIV(1,SST+1)
  135.     IF SST=0 THEN
  136.       FAKTOR=.4
  137.       KRAFTF=1
  138.     ELSEIF SST=1 OR SST=2 THEN
  139.       FAKTOR=1.6
  140.       KRAFTF=1.2
  141.     ELSEIF SST=4 THEN
  142.       FAKTOR=.4
  143.       KRAFTF=0
  144.     END IF
  145.   RETURN
  146.  
  147. SUB AKTIV(MTITEL%,MPUNKT%)STATIC
  148.   SHARED SMENU$()
  149.   MENU MTITEL%,MPUNKT%,2,"  "+SMENU$(MTITEL%,MPUNKT%)
  150.   END SUB
  151.  
  152. SUB PASSIV(MTITEL%,MPUNKT%)STATIC  
  153.   SHARED SMENU$()
  154.   MENU MTITEL%,MPUNKT%,1
  155.   MENU MTITEL%,MPUNKT%,1,"  "+SMENU$(MTITEL%,MPUNKT%)
  156.   END SUB
  157.  
  158.   
  159. SPRITVERB:
  160.   IF MPUNKT%<4 THEN
  161.     FOR I%=1 TO 3
  162.       CALL PASSIV(4,I%)
  163.     NEXT
  164.     CALL AKTIV(4,MPUNKT%)
  165.     IF MPUNKT%=1 THEN
  166.       SPRITFAKT%=1
  167.     ELSEIF MPUNKT%=2 THEN
  168.       SPRITFAKT%=10
  169.     ELSEIF MPUNKT%=3 THEN
  170.       SPRITFAKT%=50
  171.     END IF
  172.   ELSE
  173.     IF MPUNKT%=4 THEN
  174.       SPRIT#=40!
  175.       TANKLEER%=0
  176.     END IF
  177.   END IF
  178.   RETURN
  179.   
  180. BINAERANZ:
  181.   IF MPUNKT%<4 THEN                        'LICHTER
  182.     CALL PASSIV(2,BINANZ%(1)+1)
  183.     BINANZ%(1)=MPUNKT%-1
  184.     CALL AKTIV(2,MPUNKT%)
  185.   ELSEIF MPUNKT%>=4 AND MPUNKT%<=9 THEN    'BINAERANZ
  186.     IF BINANZ%(MPUNKT%-2)=1 THEN
  187.       CALL PASSIV(2,MPUNKT%)
  188.       BINANZ%(MPUNKT%-2)=0
  189.     ELSEIF BINANZ%(MPUNKT%-2)=0 THEN
  190.       CALL AKTIV(2,MPUNKT%)
  191.       BINANZ%(MPUNKT%-2)=1
  192.     END IF
  193.   ELSEIF MPUNKT%<12 THEN          'BLINKER 
  194.     IF MBLINK%=MPUNKT% THEN       'GEW.PUNKT WAR AKTIVIERT  
  195.       CALL PASSIV(2,MPUNKT%)      '--> AUSSCHALTEN
  196.       MBLINK%=0
  197.       BLINK%=0
  198.     ELSEIF MBLINK%=0 THEN         'BLINKER WAR AUS 
  199.       CALL AKTIV(2,MPUNKT%)       '--> ANSCHALTEN
  200.       IF MPUNKT%=10 THEN BLINK%=-1
  201.       IF MPUNKT%=11 THEN BLINK%=1
  202.       MBLINK%=MPUNKT%
  203.     ELSEIF MBLINK%>0 THEN         'ANDERE BLINKRICHTUNG WAR AN
  204.       CALL PASSIV(2,MBLINK%)
  205.       IF MPUNKT%=10 THEN BLINK%=-1
  206.       IF MPUNKT%=11 THEN BLINK%=1
  207.       MBLINK%=MPUNKT%
  208.       CALL AKTIV(2,MPUNKT%)
  209.     END IF
  210.   END IF
  211.   BINAERSUM=BINANZ%(1)*1+BINANZ%(2)*4+BINANZ%(3)*8
  212.   BINAERSUM=BINAERSUM+BINANZ%(4)*16+BINANZ%(5)*32
  213.   BINAERSUM=BINAERSUM+BINANZ%(6)*64+BINANZ%(7)*128
  214.   RETURN
  215.   
  216. OEFFNEN:
  217.   LOCATE 22,5: INPUT "NAME DER AUSGABEDATEI  ",DNAME$
  218.   LOCATE 22,5: PRINT "                                             "
  219.   IF DNAME$="" THEN RETURN
  220.   DNAME$="DAT:"+DNAME$
  221.   OPEN DNAME$ FOR OUTPUT AS #1 LEN=4096
  222.   RETURN
  223.   
  224. BILDAUFBAU:
  225.   CLS
  226.   LOCATE 2,6
  227.   COLOR 1,0:PRINT "GESCHWINDIGKEIT  ";
  228.   COLOR 3,0:PRINT "VERBRAUCH * 10  ";
  229.   COLOR 2,0:PRINT "TEMPERATUR"
  230.   
  231.   LOCATE 5,68:PRINT "TANKINHALT"
  232.   LOCATE 10,68:PRINT "TEMPERATUR"
  233.   COLOR 1,0
  234.   LOCATE 15,68:PRINT "F="CINT(F)
  235.   COLOR 2,0
  236.   PX%=0
  237.   FOR Y=30 TO 130 STEP 10
  238.     WERTY%=200+(30-Y)*2
  239.     PY%=Y+3
  240.     CALL PLATZIERE(WERTY%,PX%,PY%)
  241.     LINE(40,Y)-(520,Y),2
  242.   NEXT
  243.   ZAEHL=0
  244.   FA=3
  245.   WERT%=WERT%-30
  246.   FOR X=40 TO 520 STEP 20
  247.     IF ZAEHL=0 THEN
  248.       WERT%=WERT%+30
  249.       PX%=X-15
  250.       PY%=142
  251.       CALL PLATZIERE(WERT%,PX%,PY%)
  252.     END IF
  253.     LINE(X,30)-(X,130),2
  254.     ZAEHL=ZAEHL+1
  255.     IF ZAEHL>2 THEN ZAEHL=0
  256.   NEXT
  257.   LINE(40,150)-(280,150),1            'GASPOTI
  258.   FOR X=40 TO 280 STEP 24
  259.     LINE(X,150)-(X,152),1
  260.   NEXT  
  261.   X=160
  262.   LINE(X,148)-(X,152),1                
  263.   LINE(400,150)-(520,150),1            'TEMPPOTI 
  264.   FOR X=400 TO 520 STEP 12
  265.     LINE(X,150)-(X,152),1
  266.   NEXT  
  267.   X=460
  268.   LINE(X,148)-(X,152),1
  269.   COLOR 1,0
  270.   XF%=160
  271.   XT%=460
  272.   GOSUB SETFNEU
  273.   GOSUB SETTANSNEU
  274. RETURN
  275.  
  276. SETF:
  277.   AREA(FPOS%,153)
  278.   AREA(FPOS%+6,159)
  279.   AREA(FPOS%-6,159)
  280.   AREAFILL 1
  281. SETFNEU:
  282.   FPOS%=XF%+F*.12
  283.   AREA(FPOS%,153)
  284.   AREA(FPOS%+6,159)
  285.   AREA(FPOS%-6,159)
  286.   AREAFILL 1 
  287.   LOCATE 15,68: PRINT "F="CINT(F)"    "
  288.   RETURN
  289.   
  290. SETTANS:
  291.   AREA(TPOS%,153)
  292.   AREA(TPOS%+6,159)
  293.   AREA(TPOS%-6,159)
  294.   AREAFILL 1 
  295. SETTANSNEU:
  296.   TPOS%=XT%+TANS*1.2        'TANS MAX=50
  297.   AREA(TPOS%,153)
  298.   AREA(TPOS%+6,159)
  299.   AREA(TPOS%-6,159)
  300.   AREAFILL 1  
  301.   RETURN
  302.  
  303. MOUSEPATH:
  304.   I=MOUSE(0)
  305.   MPOS%=MOUSE(3)
  306.   IF MPOS%<0 THEN BEEP
  307.     IF MPOS%>=40 AND MPOS%<=280 THEN
  308.       F=(MPOS%-XF%)/.12
  309.       IF TANKLEER%=1 AND F>0 THEN
  310.         BEEP
  311.         F=0
  312.       END IF
  313.       GOSUB SETF
  314.     ELSEIF MPOS%>=400 AND MPOS%<=520 THEN
  315.       TANS=(MPOS%-XT%)/1.2
  316.       GOSUB SETTANS
  317.    END IF
  318.   RETURN
  319.   
  320. BEENDEN:
  321.   IF DNAME$<>"" THEN 
  322.     WRITE #1," "
  323.     WRITE #1," "
  324.     WRITE #1," "
  325.     WRITE #1," "
  326.     WRITE #1," "
  327.     WRITE #1," "
  328.     WRITE #1," "
  329.     WRITE #1," "
  330.     WRITE #1," "
  331.     CLOSE 1
  332.   END IF
  333.   MENU OFF
  334.   WINDOW CLOSE 4
  335.   LIBRARY CLOSE
  336.   END 
  337.   
  338. FEHLER:
  339.   IF DNAME$<>"" THEN 
  340.     WRITE #1," "
  341.     WRITE #1," "
  342.     WRITE #1," "
  343.     WRITE #1," "
  344.     WRITE #1," "
  345.     WRITE #1," "
  346.     WRITE #1," "
  347.     WRITE #1," "
  348.     WRITE #1," "
  349.     CLOSE 1
  350.   END IF
  351.   MENU OFF
  352.   WINDOW CLOSE 4
  353.   LIBRARY CLOSE
  354.   PRINT ""
  355.   PRINT "Ein Fehler ist aufgetreten!"
  356.   PRINT "Das Programm wurde beendet und die Ausgabedatei geschlossen."
  357.   END 
  358.   
  359. SUB INVERTVIDEO STATIC
  360.    CALL SetDrMd& (WINDOW(8),3)
  361. END SUB
  362.  
  363. SUB NORMALVIDEO STATIC
  364.    CALL SetDrMd& (WINDOW(8),1)
  365. END SUB
  366.  
  367. INITALL:
  368.   LIBRARY "graphics.library"
  369.   ON BREAK GOSUB BEENDEN:BREAK ON
  370.   DIM BINANZ%(8)
  371.   DEFLNG RASTPORT
  372.   DEFINT BLINK,SST,BINAERSUM 
  373.   TITEL$="Fahr-Situation-Generator            Pit Burkhardt            Januar 1988 "
  374.   WINDOW 4,TITEL$,,7
  375.   RASTPORT=WINDOW(8)
  376.   KRAFTF=1
  377.   FAKTOR=.3    '.4
  378.   VERBFAKT=20
  379.   F=0
  380.   M=900
  381.   SPRITFAKT%=1
  382.   DT=.56   '.65    'ZEITLICHES AUSGABENINTERVALL
  383.   EICH=.5  '.4     'ANPASSUNG AN SKALA
  384.   GOSUB INITMENU
  385.   ON MOUSE GOSUB MOUSEPATH
  386.   ON ERROR GOTO FEHLER
  387.   SST=0
  388.   CALL AKTIV(1,1)   'SCHALTSTELLUNG FAHREN
  389.   CALL AKTIV(2,1)   'LICHT AUS
  390.   CALL AKTIV(4,1)   'SPRIT NORMAL
  391.   INPUT"Tankinhalt bei Fahrtbeginn (0..40)    ? ",SPRIT#
  392.   IF SPRIT#<0 OR SPRIT#>40 THEN SPRIT#=40
  393.   INPUT"Kuehlmitteltemperatur bei Fahrtbeginn ? ",TEMP
  394.   INPUT"Kilometerstand bei Fahrtbeginn        ? ",KM
  395.   IF KM>9000000& THEN KM=9000000&
  396.   XNEU=40
  397.   XALT=40
  398.   VERBALT=0
  399.   TEMPALT=20
  400.   VALT=0
  401.   SPRITALT=SPRIT
  402.   MOUSE ON
  403.   'ERROR ON
  404.   RETURN
  405.  
  406. INITMENU:
  407.   DIM SMENU$(4,11)
  408.   SMENU$(1,0)="Automatik"
  409.   SMENU$(1,1)="Fahren" 
  410.   SMENU$(1,2)="Bergfahren"
  411.   SMENU$(1,3)="Rückwärts"
  412.   SMENU$(1,4)="Neutral"
  413.   SMENU$(1,5)="Parken"
  414.   SMENU$(2,0)="Binäranzeigen"
  415.   
  416.   SMENU$(2,1)="Licht aus"
  417.   SMENU$(2,2)="Abblendlicht"
  418.   SMENU$(2,3)="Fernlicht"
  419.   SMENU$(2,4)="Hecksch. Heizung"
  420.   SMENU$(2,5)="Handbremse"
  421.   SMENU$(2,6)="Gurt anlegen!"
  422.   SMENU$(2,7)="Ölstand!"
  423.   SMENU$(2,8)="Batterieladung!"
  424.   SMENU$(2,9)="Warnblinker an"
  425.   SMENU$(2,10)="Links blinken"
  426.   SMENU$(2,11)="Rechts blinken"
  427.   SMENU$(4,0)="Kraftstoff"
  428.   SMENU$(4,1)="Normalverbrauch"
  429.   SMENU$(4,2)="Verbrauch * 10"
  430.   SMENU$(4,3)="Verbrauch * 50"
  431.   SMENU$(4,4)="Tank voll"
  432.   FOR I=0 TO 5
  433.     MENU 1,I,1,"  "+SMENU$(1,I)
  434.   NEXT
  435.   FOR I=0 TO 11
  436.     MENU 2,I,1,"  "+SMENU$(2,I)
  437.   NEXT
  438.   FOR I=0 TO 4
  439.     MENU 4,I,1,"  "+SMENU$(4,I)
  440.   NEXT
  441.   ON MENU GOSUB MENUPATH
  442.   MENU ON
  443.   RETURN
  444.  
  445. MENUPATH:
  446.   MTITEL%=MENU(0)
  447.   MPUNKT%=MENU(1)
  448.   ON MTITEL% GOSUB SETSST,BINAERANZ,,SPRITVERB
  449.   RETURN
  450.     
  451. SUB PLATZIERE(WERT%,STRX%,STRY%) STATIC
  452.     SHARED RASTPORT    
  453.     CALL MOVE(RASTPORT,STRX%,STRY%)
  454.     PRINT WERT%
  455. END SUB
  456.     
  457.  
  458.  
  459.  
  460. LIST SPRITVERB
  461.  
  462.